/*
  ES6模块化语法

    暴露
      默认暴露(一个模块只能暴露一个,只能暴露一次)
        export default xxx;
      分别暴露(可以暴露多次)
        export const xxx = xxx
      统一暴露(可以暴露多次)
        export { xxx }
    引入
      默认暴露，引入 import xxx from 'xxx'
      分别暴露/统一暴露，引入 import {} from 'xxx'
*/

// import obj from "./module1";
// import { aaa } from "./module1";

// import { ccc, ddd } from "./module2";
// import m2 from "./module2";

// import m3 from "./module3";
// import { fff, ggg } from "./module3";
// import m3, { fff, ggg } from "./module3";

// 引入分别暴露的部分内容
// import { ccc as moduleCCC, ddd, eee } from "./module2";

// 引入暴露的所有内容
// * 就是 引入module2暴露的所有内容
// as 重命名为 m2
// import * as m2 from "./module2";

/*
  不管什么暴露，暴露的一定是一个对象
    export { xxx } 统一暴露暴露了一个对象
    export const xxx = xxx 分别暴露，在暴露的对象中添加xxx属性暴露出去
    export default xxx 默认暴露，在暴露的对象中添加default属性暴露出去

    引入默认暴露的内容：import xxx from './xxx'
    实际上：import { default as xxx } from './module'

      为什么import { xxx } from './module' 对默认暴露没有效果
        默认暴露暴露的是default属性，xxx不是default属性，找不到就是undefined
      为什么import xxx from './module' 对分别/统一暴露没有效果
        实际上：import { default as xxx } from './module'
        而分别/统一暴露没有暴露default，所以找不到就是undefined

  总结：
    关于暴露：
      如果只有一个内容需要暴露，使用默认暴露
      如果有多个内容需要暴露，使用分别/统一暴露
        当然也可以默认暴露 + 分别/统一暴露（有一个暴露的内容非常重要，其他内容相对次要）
    关于引入：
      一定看暴露的方式
        如果是默认暴露：import xxx from 'xxx'
        如果分别/统一暴露：
          只需要使用部分内容：import { xxx } from 'xxx'
          需要全部内容：import * as xxx from 'xxx'
*/

// const ccc = "ccc";

// console.log(m2);

// import * as m2 from "./module2";
// export { m2 };
// 简写
// 引入module2暴露的所有内容，重命名为m2，将m2分别暴露出去
export * as m2 from "./module2";
export * as m3 from "./module3";
export * as m1 from "./module1";
